
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

/*
 * Pannello contenente una label e due pulsanti
 * questi vengono gestiti da JBlocchi per far si che, ad esempio, alla premuta del tasto "su" venga spostato in alto
 * contiene una variabile privata, realId, per sapere la sua reale posizione nell'algoritmo corretto
 */
public class JBlocco extends JPanel 
{
    JLabel id,label;
    JButton su,giu;

    String desc; //descrizione del blocco dell'algoritmo

    int realId; //real Id contiene la sua reale posizione nell'algoritmo
    int currentId; //currentId contiene la posizione del blocco dopo che e' stato mescolato e/o spostato dall'utente
    //per sapere se il blocco e' nella posizione corretta c'e' il metodo check che controlla se realId==currentID

    Container parent; //imposta un Actionlistener sdei due pulsanti ul padre.

    public JBlocco(int i,String s,Container p)
    {
        super();
        realId=i;
        desc=s;
        parent = p;
        initComponents();

    }

    //cambia il currentId nel caso il blocco venga spostato dall utente
    public void setID(Integer n)
    {
        currentId=n;
        update();

    }

    private void initComponents() {
        id = new JLabel();
        su = new JButton("su");
//        System.out.println(parent);
// IMPOSTO il contenitore (jBlocchi) come Listener degli eventi
// e' lui che si occupera' di fare gli scambi opportuni tra i valori dei JBlocco
        su.addActionListener( (ActionListener) parent);
        giu = new JButton("giu");
        giu.addActionListener( (ActionListener) parent);
        label = new JLabel();
        
        this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
        this.add(su);
        this.add(giu);
        this.add(id);
        this.add(label);
        update();
    }

    //controlla che il blocco sia nella posizione assegnata inizialmente
    boolean indiceCoincide() {
        return (currentId==realId);
    }

    public int getCurrentId()
    {
        return currentId;        
    }

    public String getDescrizione()
    {
        return desc;        
    }  
  public void  setDescrizione(String s)
    {
        desc = s;
        update();
    }  

    public void set(int currentid,int realid,String s)
    {
        desc = s;
        currentId = currentid;
        realId = realid;
        update();
    }

    public int getRealId()
    {
        return realId;
    }
    public void update()
    {
        id.setText("  "+currentId+". ");
        label.setText(" "+desc);
    }
}